package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblGanador;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.GeneraBoletosForm;
import com.mastercard.assets.web.util.to.UserLogin;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

public class BoletoAltaRegistrar
        extends
		Action
{
    
    public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
    {
        HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
                
                // formulario
                GeneraBoletosForm f = ( GeneraBoletosForm ) form ;
                
                int cveWorkPreimplementation = f.getCveWorkPreimplementation( ) ;
                int total = f.getNumGanadores( ) ;
                int paq[] = f.getCvePaquete( ) ;                
                List< FormFile > files = f.getArchivoBoleto( ) ,
                        Cotizaciones = f.getArchivoCotizacion( ) ,
                        Agendas = f.getArchivoAgenda( ) ;
               
                String nombre = "" , nombreCotizacion = "" , nombreAgenda ;
                
                for ( int x = 0 ; x < total ; x ++ )
                {
                    int pk = paq[x];
                    try {
                            List<TblGanador> gan = MasterCardDAO.getWinnerWithPackage( pk ) ;                            
                            
                            for ( TblGanador g : gan )
                            {
                                int cve = g.getCveGanador( ) ;
                                FormFile archivo = files.get( x ) ,
                                        cotizacion = Cotizaciones.get( x ),
                                        agenda = Agendas.get( x ) ;
                                nombre = archivo.getFileName( ) ;
                                nombreCotizacion = cotizacion.getFileName( ) ;
                                nombreAgenda = agenda.getFileName( ) ;
                                
                                if ( !nombre.equals("") ) {
                                    
                                    // primero verifica si hay un archivo relacionado con el ganador
                                    // si lo hay lo borra

                                    String filePath = MCUtil.extractBoletoFileName( cve , nombre ) ;
                                    System.out.println( "Boleto: " + cve + " - " + filePath ) ;
                                    System.out.println( "Directorio de boletos: " + MCUtil.BOLETO_DIR ) ;
                                    System.out.println( "Directorio de boletos: " + MCUtil.getBoletoDir( ) ) ;

                                    // borra todos los archivos relacionados con el ganador
                                    MCUtil.removeAllBoletosFiles( cve ) ;

                                    boolean winner  = MasterCardDAO.updateGanadorArchivo( cve , nombre , 1 ) ;

                                    if ( winner == true )
                                    {                                    
                                        // en caso de que no haya error
                                        // guarda el archivo
                                        // nombre d ela forma
                                        //String filePath = MCUtil.extractBoletoFileName( cve , archivo.getFileName( ) ) ;

                                        System.out.println( "Boleto: " + cve + " - " + MCUtil.getConfProperty( MCUtil.CONF_PROPS_BOLETO_DIR_PATH ) + filePath ) ;

                                        System.out.println( "Directorio de Boletos: " + MCUtil.BOLETO_DIR ) ;

                                        // abre el archivo
                                        File boletoDir = new File( MCUtil.getBoletoDir( ) ) ;
                                        if( ! boletoDir.exists( ) )
                                                boletoDir.mkdirs( ) ;

                                        File boletoFile = new File( boletoDir , filePath ) ;
                                        System.out.println( "Ruta del Boleto: " + boletoFile.getAbsolutePath( ) ) ;
                                        FileOutputStream out = new FileOutputStream(  boletoFile , false ) ;
                                        out.write( archivo.getFileData( ) ) ;
                                        out.close( ) ;                                    
                                    }                                    
                                }
                                
                                if ( !nombreAgenda.equals("") ) {
                                    
                                    // primero verifica si hay un archivo relacionado con el ganador
                                    // si lo hay lo borra

                                    String filePathAgenda = MCUtil.extractAgendaFileName( cve , nombreAgenda ) ;
                                    System.out.println( "Agenda: " + cve + " - " + filePathAgenda ) ;
                                    System.out.println( "Directorio de agendas: " + MCUtil.AGENDA_DIR ) ;
                                    System.out.println( "Directorio de agendas: " + MCUtil.getAgendaDir( ) ) ;

                                    // borra todos los archivos relacionados con el ganador
                                    MCUtil.removeAllAgendasFiles( cve ) ;

                                    boolean winner  = MasterCardDAO.updateGanadorArchivo( cve , nombreAgenda , 2 ) ;

                                    if ( winner == true )
                                    {                                    
                                        // en caso de que no haya error
                                        // guarda el archivo
                                        // nombre d ela forma
                                        //String filePath = MCUtil.extractBoletoFileName( cve , archivo.getFileName( ) ) ;

                                        System.out.println( "Agenda: " + cve + " - " + MCUtil.getConfProperty( MCUtil.CONF_PROPS_AGENDA_DIR_PATH ) + filePathAgenda ) ;

                                        System.out.println( "Directorio de Agendas: " + MCUtil.AGENDA_DIR ) ;

                                        // abre el archivo
                                        File agendaDir = new File( MCUtil.getAgendaDir( ) ) ;
                                        if( ! agendaDir.exists( ) )
                                                agendaDir.mkdirs( ) ;

                                        File agendaFile = new File( agendaDir , filePathAgenda ) ;
                                        System.out.println( "Ruta de la Agenda: " + agendaFile.getAbsolutePath( ) ) ;
                                        FileOutputStream out = new FileOutputStream(  agendaFile , false ) ;
                                        out.write( agenda.getFileData( ) ) ;
                                        out.close( ) ;                                    
                                    }                                    
                                }
                                
                                if ( !nombreCotizacion.equals("") ) {
                                    
                                    // primero verifica si hay un archivo relacionado con el ganador
                                    // si lo hay lo borra

                                    String filePathCotizacion = MCUtil.extractCotizacionFileName( cve , nombreCotizacion ) ;
                                    System.out.println( "Cotizacion: " + cve + " - " + filePathCotizacion ) ;
                                    System.out.println( "Directorio de cotizaciones: " + MCUtil.COTIZACION_DIR ) ;
                                    System.out.println( "Directorio de cotizaciones: " + MCUtil.getCotizacionDir( ) ) ;

                                    // borra todos los archivos relacionados con el ganador
                                    MCUtil.removeAllCotizacionFiles( cve ) ;

                                    boolean winner  = MasterCardDAO.updateGanadorArchivo( cve , nombreCotizacion , 3 ) ;

                                    if ( winner == true )
                                    {                                    
                                        // en caso de que no haya error
                                        // guarda el archivo

                                        System.out.println( "Cotizacion: " + cve + " - " + MCUtil.getConfProperty( MCUtil.CONF_PROPS_COTIZACION_DIR_PATH ) + filePathCotizacion ) ;

                                        System.out.println( "Directorio de Cotizaciones: " + MCUtil.COTIZACION_DIR ) ;

                                        // abre el archivo
                                        File cotizacionDir = new File( MCUtil.getCotizacionDir( ) ) ;
                                        if( ! cotizacionDir.exists( ) )
                                                cotizacionDir.mkdirs( ) ;

                                        File cotizacionFile = new File( cotizacionDir , filePathCotizacion ) ;
                                        System.out.println( "Ruta de la Cotizacion: " + cotizacionFile.getAbsolutePath( ) ) ;
                                        FileOutputStream out = new FileOutputStream(  cotizacionFile , false ) ;
                                        out.write( cotizacion.getFileData( ) ) ;
                                        out.close( ) ;                                    
                                    }                                    
                                }
                                    
                                
                            }
                            
                            
                        } catch (MasterCardException ex) {
                            MasterCardDAO.closeEntityManager( ) ;
                            Logger.getLogger(BoletoAltaRegistrar.class.getName()).log(Level.SEVERE, null, ex);
                        }
                }
                
                // en caso de que lo haga todo correctamente manda a la pagina de success
		user.setNextWorkArea( "/WEB-INF/pages/WorkArea/GeneraBoletosExito.jsp" ) ;
		
		request.getSession( ).setAttribute( "cve" , cveWorkPreimplementation ) ;
		request.getSession( ).removeAttribute( "GeneraGanadoresForm" ) ;
		
                MasterCardDAO.closeEntityManager( ) ;
		return mapping.findForward( "success" ) ;
    }
    
}
